﻿//typedef struct {
//    int data[100];
//    int top;
//    int bottom;
//}stack;
//
//stack* StackCreate() {
//    stack* p = (stack*)malloc(sizeof(stack));//分配新空间
//    if (p == NULL)//分配失败 
//        return 0;
//    p->bottom = p->top = 0;//分配成功 
//    return p;
//}
//
//void StackInput(stack* q, int x) {
//    q->data[q->top] = x;//存入栈中
//    q->top++;//栈顶指针加1
//}
//
//int StackOutput(stack* p) {
//    if (p->top != p->bottom) {//栈非空 
//        int x = p->data[(p->top) - 1];//栈顶内容输出 
//        p->top--;//栈顶减1 
//        return x;
//    }
//    else {
//        return 0;
//    }
//}
//
//void Stack_turn(stack* p, stack* q) {
//    while (p->top != 0) {
//        StackInput(q, p->data[p->top - 1]);
//        p->top--;
//    }
//}
//
//typedef struct {
//    stack* stack_in;
//    stack* stack_out;
//} MyQueue;
//
//
//MyQueue* myQueueCreate() {
//    stack* stack_in;
//    stack* stack_out;
//    stack_in = StackCreate();
//    stack_out = StackCreate();
//    MyQueue* myQueue = (MyQueue*)malloc(sizeof(MyQueue));
//    myQueue->stack_in = stack_in;
//    myQueue->stack_out = stack_out;
//    return myQueue;
//}
//
//void myQueuePush(MyQueue* obj, int x) {
//    StackInput(obj->stack_in, x);
//}
//
//int myQueuePop(MyQueue* obj) {
//    Stack_turn(obj->stack_in, obj->stack_out);
//    int x = StackOutput(obj->stack_out);
//    Stack_turn(obj->stack_out, obj->stack_in);
//    return x;
//}
//
//int myQueuePeek(MyQueue* obj) {
//    int x = obj->stack_in->data[obj->stack_in->bottom];
//    return x;
//}
//
//bool myQueueEmpty(MyQueue* obj) {
//    if (obj->stack_in->top == obj->stack_in->bottom) {
//        return true;
//    }
//    return false;
//}
//
//void myQueueFree(MyQueue* obj) {
//    free(obj->stack_in);
//    free(obj->stack_out);
//}

//typedef struct data
//{
//    int data;
//    int size;
//    struct data* next;
//}Data;
//typedef struct {
//    Data* front;
//    Data* rear;
//} MyCircularQueue;
//
//MyCircularQueue* myCircularQueueCreate(int k) {
//    MyCircularQueue* Queue = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
//    Queue->rear = Queue->front = 0;
//    if (k)
//    {
//        k--;
//        Data* Queue->front = Queue->rear = (Data*)malloc(sizeof(Data));
//        Queue->front->next = 0;
//        Queue->front->data = 0;
//        Queue->front->size = 1;
//    }
//    int n = 1;
//    while (k--)
//    {
//        n++;
//        Data* p = (Data*)malloc(sizeof(Data));
//        p->data = 0;
//        p->size = n;
//        Queue->rear->next = p;
//        Queue->rear = p;
//    }
//    Queue->rear->next = Queue->front;
//    return Queue->front;
//}
//
//bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
//    Data* p = obj->front;
//    int n = p->size;
//    while (p->data)
//    {
//        p = p->next;
//        if (p->size == n)
//            break;
//    }
//    if (!p->data)
//    {
//        p->data = value;
//        return true;
//    }
//    return false;
//}
//
//bool myCircularQueueDeQueue(MyCircularQueue* obj) {
//    Data* p = obj->front;
//    int n = p->size;
//    while (p->data)
//    {
//        p = p->next;
//        if (p->size == n)
//            break;
//    }
//    if (p->data)
//    {
//        p->data = 0;
//        return true;
//    }
//    return false;
//}
//
//int myCircularQueueFront(MyCircularQueue* obj) {
//    if (!obj->front->data)
//        return -1;
//    return obj->front->data;
//}